package com.zust.zst.dao.mapper.chooselesson;

import com.zust.zst.common.dto.chooselesson.AddCultivationPlanDTO;
import com.zust.zst.common.dto.chooselesson.ColGraMajDTO;
import com.zust.zst.common.vo.chooselesson.CultivationPlanVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 培养计划DAO
 *
 * @author Gavin Zhang
 * @date 2022/12/7 16:24
 */
@Mapper
public interface CultivationSystemMapper {

    /**
     * 通过学院名获取其历史学年
     *
     * @return 历史学年列表
     */
    List<Integer> getAllGradeByCollegeId(@Param("id") Integer collegeId);

    /**
     * 获取对应二级学院及特定年级的所有专业
     *
     * @return 对应二级学院及特定年级的所有专业
     */
    List<String> getMajorByCollegeAndGrade(@Param("id") Integer id, @Param("grade") Integer grade);

    /**
     * 获取某专业所有培养计划课程
     * @return 某专业所有培养计划课程
     */

    /**
     * 通过学年、专业名获取指定的专业id
     *
     * @param grade 年级
     * @param major 专业
     * @return 指定的专业id
     */
    int getMajorIdByColGraMaj(@Param("grade") Integer grade, @Param("major") String major);

    /**
     * 获取某专业所有培养计划课程条数
     *
     * @param majorId 指定专业id
     * @return 某专业所有培养计划课程条数
     */
    int getCultivationCountByMajor(@Param("majorId") int majorId);

    /**
     * 获取某专业所有培养计划课程
     *
     * @param majorId      指定专业id
     * @param colGraMajDTO 学院、年级、专业
     * @return 某专业所有培养计划课程
     */
    List<CultivationPlanVO> getCultivationByMajor(@Param("majorId") int majorId, @Param("dto") ColGraMajDTO colGraMajDTO);

    /**
     * 添加培养计划课程
     *
     * @param majorId 指定专业id
     * @param dto     培养计划课程
     * @return 插入结果
     */
    int addCultivationPlanCourse(@Param("majorId") int majorId, @Param("dto") AddCultivationPlanDTO dto);
}
